<template>
  <div>
    <UploadExcel :on-success="handleSuccess" />
  </div>
</template>

<script>
import { reqAddEmployeeBatch } from '@/api/employee'
export default {
  name: 'Import',
  methods: {
    // 上传成功后的处理函数
    handleSuccess({ header, results }) {
      // 需要判断 -> 导入的功能是什么 ? 工资导入 / 员工导入 / 社保导入 /考勤导入
      const query = this.$route.query
      if (query.type === 'user') {
        // 员工导入
        this.handleEmployeeBatch(header, results)
      }
      if (query.type === 'money') {
        // 工资导入
      }
    },
    // 员工导入
    async handleEmployeeBatch(header, results) {
      console.log(results) // excel的表格数据 -> 对象中的key是中文 -> 英文
      // 中英文的key的对照表
      const userRelations = {
        '入职日期': 'timeOfEntry',
        '手机号': 'mobile',
        '姓名': 'username',
        '转正日期': 'correctionTime',
        '工号': 'workNumber'
      }
      const arr = []
      results.forEach(item => {
        // console.log(item) // 对象 -> excel 每一行的数据
        const obj = {}
        for (const key in item) {
          // console.log(key) // 手机号  姓名 工号 ....
          // englishKey -> 中文key所对应的英文key
          const englishKey = userRelations[key]
          // 判断是入职日期 / 转正日期 -> formatExcelDate 进行解析
          // 提供一个数组  ['timeOfEntry', 'correctionTime']
          // includes() 包含 符合条件 / true
          // if (englishKey === 'timeOfEntry' || englishKey === 'correctionTime') {
          if (['timeOfEntry', 'correctionTime'].includes(englishKey)) {
            obj[englishKey] = this.formatExcelDate(item[key])
          } else {
            obj[englishKey] = item[key]
          }
        }
        // 基于原来的对象 -> 浅拷贝新的对象
        // 期待: 拷贝的过程中 -> key -> 转换 -> 中文 / 英文
        // console.log('浅拷贝的对象', obj)
        arr.push(obj)
      })
      // console.log('最终生成的新数组', arr)
      // 1. 调用请求接口
      await reqAddEmployeeBatch(arr)
      // 2. 提示用户
      this.$message.success('批量导入员工成功')
      // 3. 跳转到员工列表页面
      this.$router.push('/employees')
    },
    // 处理excel的日期  excel -> 1900 / js -> 1970
    formatExcelDate(numb, format) {
      const time = new Date(numb * 24 * 3600000 + 1) // 毫秒
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() - 1 + ''
      if (format && format.length === 1) {
        return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    }
  }
}
</script>

<style>

</style>
